package cn.gok.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

/**
    自定义切面类： 在切面类中定义要增强的功能
 */
public class MyAspect {

    /**
      定义环绕通知的增强功能
            因为环绕通知中，我们无法确定，原始的代码应在插入在 增强代码哪个位置。

            所以我们需要通过 ProceedingJoinPoint对象指定 原始功能应该所处位置
     */
    public Object around(ProceedingJoinPoint pj){
        Object result = null;
        System.out.println("第一行代码。。。。");
        try {
            /*
               pj.proceed()  指定原始代码应在的位置，result表示原始代码执行后返回的结果
                             其重载方法： proceed(Object[] var1)
                                  该方法让我们可以允许我们用新的参数来执行目标方法
             */
//            result = pj.proceed();
            result = pj.proceed(new Object[]{10});

        } catch (Throwable e) {
            e.printStackTrace();
        }

        System.out.println("第二行代码。。。。");
        System.out.println("第三行代码。。。。");
        System.out.println("第四行代码。。。。");
        return result;
    }



    /**
     * 定义要增强的功能
     */
    public void action1(){
        System.out.println("进行数据校验。。。");
    }

    /**
     * 定义要增强的功能
     */
    public void action2(){
        System.out.println("进行日志记录。。。");
    }


    /**
     * 定义要增强的功能
     */
    public void action3(){
        System.out.println("进行异常的处理。。。");
    }


}
